package com.mjf.spark.day03

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 转换算子-sample
 *    随机抽样
 */
object Spark08_Transformation_sample {
  def main(args: Array[String]): Unit = {

    // 创建SparkConf配置文件
    val conf = new SparkConf().setMaster("local[*]").setAppName("Spark08_Transformation_sample")
    // 创建SparkContext对象
    val sc = new SparkContext(conf)

    val rdd: RDD[Int] = sc.makeRDD(1 to 10)

    /**
     * 从RDD中随机抽取数据
     *
     * withReplacement: 表示是否抽样放回，true表示抽样放回
     * fraction:
     *    -withReplacement=true   表示期望每个元素出现的次数 >0
     *    -withReplacement=false  表示RDD中每个元素出现的概率[0,1]
     * seed: 表示抽样算法初始值，一般不指定
     */
    val newRDD1: RDD[Int] = rdd.sample(true, 3)  // 抽样放回
//    newRDD1.collect().foreach(println)

    val newRDD2: RDD[Int] = rdd.sample(false, 0.6)  // 抽样不放回
//    newRDD2.collect().foreach(println)

    val newRDD3: Array[Int] = rdd.takeSample(false, 3)  // 取出指定个数的元素
    newRDD3.foreach(println)

    // 关闭连接
    sc. stop()

  }
}
